#include <iostream>
using namespace std;
const long long mod = 1000000007LL;
long long f[255][255];
long long C[255][255];
long long powk[255], powk1[255];
int n, k;
int main () {
cin >> n >> k;
for (int i = 0; i <= n; i++) {
C[i][0] = 1;
C[i][i] = 1;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j < i; j++) {
C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % mod;
}
}
powk[0] = 1LL;
for (int i = 1; i <= n; i++) {
powk[i] = (powk[i - 1] * (long long) k) % mod;
}
powk1[0] = 1LL;
for (int i = 1; i <= n; i++) {
powk1[i] = (powk1[i - 1] * (long long) (k - 1)) % mod;
}
f[0][0] = 1LL;
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= n; j++) {
if (f[i][j] == 0) {
continue;
}
long long value = f[i][j];
(value *= powk1[n - j]) %= mod;
(value *= (powk[j] - powk1[j] + mod) % mod) %= mod;
(f[i + 1][j] += value) %= mod;
for (int x = 1; x <= n - j; x++) {
value = f[i][j];
(value *= C[n - j][x]) %= mod;
(value *= powk[j]) %= mod;
(value *= powk1[n - j - x]) %= mod;
(f[i + 1][j + x] += value) %= mod;
}
}
}
cout << f[n][n];
return 0;
}
1630D - Flipping Range | 1328A - Divisibility Problem |
339A - Helpful Maths | 4A - Watermelon |
476A - Dreamoon and Stairs | 1409A - Yet Another Two Integers Problem |
977A - Wrong Subtraction | 263A - Beautiful Matrix |
180C - Letter | 151A - Soft Drinking |
1352A - Sum of Round Numbers | 281A - Word Capitalization |
1646A - Square Counting | 266A - Stones on the Table |
61A - Ultra-Fast Mathematician | 148A - Insomnia cure |
1650A - Deletions of Two Adjacent Letters | 1512A - Spy Detected |
282A - Bit++ | 69A - Young Physicist |
1651A - Playoff | 734A - Anton and Danik |
1300B - Assigning to Classes | 1647A - Madoka and Math Dad |
710A - King Moves | 1131A - Sea Battle |
118A - String Task | 236A - Boy or Girl |
271A - Beautiful Year | 520B - Two Buttons |